﻿using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
using LayerEntity.Producto;
using LayerLogic;

namespace System2012.Almacen
{
    public partial class frmGrupos : DevExpress.XtraEditors.XtraForm
    {
        /// <summary>
        /// intProcesoActivo proceso que se esta ejecuntado dentro del Hilo de backgroud
        /// </summary>
        int intProcesoActivo = 0;
        /// <summary>
        /// Indica si estamos editanado o creando uno Nuevo
        /// 0: Nuevo Documento
        /// 1: Editando y Guardando
        /// </summary>
        int operacion = 0;
        /// <summary>
        /// metodos y funciones globales de ayuda del sistema
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        GUtil util = new GUtil();
        /// <summary>
        /// 
        /// </summary>
        DataTable dtbG;
        public frmGrupos()
        {
            this.InitializeComponent();
        }

        #region AMNTENIMIENTOS
        private void NuevoGrupo()
        {
            this.util.RecControles(this);
            this.operacion = 0;
        }

        private void Grabar()
        {
            EGrupo objPro = new EGrupo();
            //LProducto objPro = new LProducto();

            objPro.Id_Grupo = this.txtId.Text;
            objPro.Nombre = this.txtNombre.Text;
            objPro.Id_Estado = int.Parse(this.CbListEstado.EditValue.ToString());
            String resultado = System2012.SystemUtils.RecodManajerproducto.MantenimientoGrupos(objPro, this.operacion == 0 ? EnumOperaciones.Insertar : EnumOperaciones.Actualizar);
            this.txtId.Text = objPro.Id_Grupo;
            if (resultado == "0")
            {
                XtraMessageBox.Show(this, "PROCESO EFECTUADO CON EXITO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.None);
            }
            else
            {
                if (resultado == "-1")
                {
                    XtraMessageBox.Show(this, "INCONSISTENCIA INESPERADA \n NO SE REALIZO NINGUNA OPERACIÓN", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (resultado == "-2")
                    {
                        XtraMessageBox.Show(this, "EL NOMBRE DEL GRUPO INGRESADO YA EXISTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (resultado == "-2")
                        {
                            XtraMessageBox.Show(this, "INCONSISTENCIA INESPERADA \n NO SE REALIZO NINGUNA CTUALIZACION", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            if (resultado == "-4")
                            {
                                XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUN REGISTRO\n PARA REALIAR ESTE\n PROCESO INTENTE NUEVAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                }
            }
            this.intProcesoActivo = 2;
            this.BGWLoadList.RunWorkerAsync(objPro);
        }

        private void Editar(int index)
        {
            this.txtId.Text = this.dtbG.Rows[index]["idgrupo"].ToString();
            this.txtNombre.Text = this.dtbG.Rows[index]["nombre"].ToString();
            this.CbListEstado.EditValue = int.Parse(this.dtbG.Rows[index]["id_estado"].ToString());
            this.operacion = 1;
        }

        #endregion
        private void BGWLoadList_DoWork(object sender, DoWorkEventArgs e)
        {
            if (this.intProcesoActivo == 1)
            {
                this.BGWLoadList.ReportProgress(30, "Cargando Estado");
                e.Result = SystemUtils.RecordManagerCommonList.GetEstados();
                this.BGWLoadList.ReportProgress(100, "Completado");
            }
            if (this.intProcesoActivo == 2)
            {
                this.BGWLoadList.ReportProgress(30, "Cargando Grupo");
                EGrupo obj = new EGrupo();
                obj.Nombre = this.txtFiltroGrupo.Text;
                this.dtbG = SystemUtils.RecodManajerproducto.GetListaGrupo(obj);
                e.Result = this.dtbG;
                this.BGWLoadList.ReportProgress(100, "Completado");
            }
        }

        private void BGWLoadList_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (this.intProcesoActivo == 1)
            {
                this.CbListEstado.Properties.DataSource = e.Result;
                this.intProcesoActivo = 2;
                if (!this.BGWLoadList.IsBusy)
                {
                    this.BGWLoadList.RunWorkerAsync();
                }
            }
            if (this.intProcesoActivo == 2)
            {
                //dtbG = (DataTable)e.Result;
                this.gridControl1.DataSource = e.Result;// System2012.SystemUtils.MantenanceHabitacion.getHabitaciones();
                this.gridControl1.RefreshDataSource();
                //intProcesoActivo = 2;
                //if (!BGWLoadList.IsBusy) BGWLoadList.RunWorkerAsync();
            }
        }

        private void frmGrupo_Load(object sender, EventArgs e)
        {
            this.intProcesoActivo = 1;
            if (!this.BGWLoadList.IsBusy)
            {
                this.BGWLoadList.RunWorkerAsync();
            }
        }

        private void barManager1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if ((string)e.Item.Tag == "Nuevo")
            {
                this.NuevoGrupo();
            }
            if ((string)e.Item.Tag == "Grabar")
            {
                this.Grabar();
            }
        }

        private void txtFiltroGrupo_TextChanged(object sender, EventArgs e)
        {
            this.intProcesoActivo = 2;
            if (!this.BGWLoadList.IsBusy)
            {
                this.BGWLoadList.RunWorkerAsync();
            }
        }

        private void BGWLoadList_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.barEditItem1.EditValue = e.ProgressPercentage;
        }

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            this.Editar(e.RowHandle);
        }

        private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            if (e.RowHandle >= 0)
            {
                GridView view = sender as GridView;
                if (view.GetRowCellValue(e.RowHandle, view.Columns["estado"]).ToString() == "ELIMINADO")
                {
                    e.Appearance.BackColor = Color.Red;
                    e.Appearance.ForeColor = Color.Snow;
                }
                else
                {
                    if (view.GetRowCellValue(e.RowHandle, view.Columns["estado"]).ToString() == "INACTIVO")
                    {
                        e.Appearance.BackColor = Color.FromArgb(0xFF, 0xFF, 0x99);
                        e.Appearance.ForeColor = Color.Black;
                    }
                }
            }
        }
    }
}